package swinghacks.ch09.DragAndDrop.hack69;

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;

import javax.swing.SwingUtilities;

public class GhostComponentAdapter extends GhostDropAdapter {
	public GhostComponentAdapter(GhostGlassPane glassPane, String action) {
		super(glassPane, action);
	}

	public void mousePressed(MouseEvent e) {
		Component c = e.getComponent();

		BufferedImage image = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB);
		Graphics g = image.getGraphics();
		c.paint(g);

		glassPane.setVisible(true);

		Point p = (Point) e.getPoint().clone();
		SwingUtilities.convertPointToScreen(p, c);
		SwingUtilities.convertPointFromScreen(p, glassPane);

		glassPane.setPoint(p);
		glassPane.setImage(image);
		glassPane.repaint();
	}

	public void mouseReleased(MouseEvent e) {
		Component c = e.getComponent();

		Point p = (Point) e.getPoint().clone();
		SwingUtilities.convertPointToScreen(p, c);

		Point eventPoint = (Point) p.clone();
		SwingUtilities.convertPointFromScreen(p, glassPane);

		glassPane.setPoint(p);
		glassPane.setVisible(false);
		glassPane.setImage(null);

		fireGhostDropEvent(new GhostDropEvent(action, eventPoint));
	}
}